package com.tjetc.house.view;



import com.tjetc.house.domain.House;
import com.tjetc.house.service.HouseService;
import com.tjetc.house.util.Utility;

import java.util.Objects;


/**
 * 页面展示信息
 */
public class HouseView {
    private boolean loop = true;

    private char input;

    private HouseService houseService = new HouseService(2);

    /**
     * 打印菜单信息
     */
    public void mainMenu(){
        // 1. 先输出菜单
        // 2. 读取用户输入  调用工具类实现
        // 3. 根据不同功能菜单调用不同的功能 使用switch
        // 4. 循环的过程 （循环的四要素）
        do {
            System.out.println("-----------房屋出租系统-------");
            System.out.println("1.新增房源");
            System.out.println("2.查找房屋");
            System.out.println("3.删除房屋");
            System.out.println("4.修改房屋");
            System.out.println("5.房屋列表");
            System.out.println("6.退出系统");
            System.out.println("请输入你要选择的功能：");
            input = Utility.readChar();
            switch (input) {
                case '1':
                    addHouse();
//                    System.out.println("新增");
                    break;
                case '2':
                    findHouseById();
//                    System.out.println("查找");
                    break;
                case '3':
                    deleteHouse();
                    //System.out.println("删除");
                    break;
                case '4':
                    updateHouseById();
//                    System.out.println("修改");
                    break;
                case '5':
                    listHouses();
                    //System.out.println("列表");
                    break;
                case '6':
//                    System.out.println("退出");
                    exit();
                    break;
                default:
            }
        } while (loop);

    }

    /**
     * 根据房屋id更新房屋信息
     */
    private void updateHouseById() {
        System.out.println("------------------根据id更新房屋信息-----------");
        // 提示用户输入要更新的id
        System.out.print("请输入要更新的房屋id(-1退出)：");
        int updateId = Utility.readInt();
        if (updateId == -1) {
            System.out.println("放弃更新，退出");
            // 此时不能在往下执行了
            return;
        }
        // 执行真正的更新逻辑
        // 首先应该查找到要修改的房屋信息
        // 获取对象的引用了？如果修改了当前值 意味着 数组中的数据就被修改了
        House house = houseService.selectHouseById(updateId);
        if (house == null) {
            System.out.println("您查找的数据不存在");
            return;
        }
        System.out.print("姓名(" + house.getName() + "): ");
        String name = Utility.readString(8, "");
        if (!"".equals(name)) {
            house.setName(name);
        }
        System.out.print("电话(" + house.getPhone() + "):");
        int phone = Utility.readInt(-1);
        if (-1 != phone) {
            house.setPhone(phone);
        }
        System.out.print("地址(" + house.getAddress() + "): ");
        String address = Utility.readString(18, "");
        if (!"".equals(address)) {
            house.setAddress(address);
        }
        System.out.print("租金(" + house.getRent() + "):");
        int rent = Utility.readInt(-1);
        if (rent != -1) {
            house.setRent(rent);
        }
        System.out.print("状态(" + house.getStatus() + "):");
        String state = Utility.readString(3, "");
        if (!"".equals(state)) {
            house.setStatus(state);
        }
        // 输入完了 为什么没有调用Service中的修改方法呢？
        // 在view中修改house的数据 那么在数组中House的值 发生改变了么？发生改变
        System.out.println("房屋信息已修改");

    }

    /**
     * 根据id查询房屋信息
     */
    private void findHouseById() {
        System.out.println("-----------根据房屋id查询房屋信息--------");
        // 提示用户输入要查询的id
        System.out.print("请输入要查询的房屋id：");
        int findId = Utility.readInt();
        // 调用查询的业务
        House house = houseService.selectHouseById(findId);
//        Objects.isNull()
        if (house != null) {
            System.out.println(house);
        }else {
            System.out.println("根据当前id未找到房屋信息");
        }

    }

    /**
     * 删除房屋信息
     */
    private void deleteHouse() {
        System.out.println("--------------删除房屋信息-------------");
        // 提示用户输入要删除的id
        System.out.print("请输入要删除的房屋id(-1退出)：");
        int deleteId = Utility.readInt();
        if (deleteId == -1) {
            System.out.println("放弃删除，退出");
            // 此时不能在往下执行了
            return;
        }
        // 提示用户是否真的删除，防止用户误删的情况
        // 用户随便输入
        input = Utility.readConfirmSelection();
        // 执行真的删除
        if (input == 'Y') {
            // 调用处理删除的业务逻辑
            //System.out.println("删除");
            boolean isSuccess = houseService.deleteHouse(deleteId);
            if (isSuccess) {
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        }else {
            System.out.println("放弃删除，退出");
        }

    }

    /**
     * 添加房屋信息
     */
    private void addHouse() {
        System.out.println("-----------添加房屋信息-------------");
        // 读取用户输入
        //编号 房主 电话 地址 月租 状态(未出租/已出租)
        System.out.print("姓名：");
        String name = Utility.readString(3);
        System.out.print("电话：");
        int phone = Utility.readInt();
        System.out.print("地址：");
        String address = Utility.readString(20);
        System.out.print("月租：");
        int rent = Utility.readInt();
        System.out.print("状态(未出租/已出租)：");
        String status = Utility.readString(3);
        // 构造一个House对象
        House house = new House(0, name, phone, address, rent, status);
        // 调用添加的业务处理逻辑
        boolean isSuccess = houseService.insertHouse(house);
        if (isSuccess) {
            System.out.println("添加成功");
        }else {
            System.out.println("添加失败");
        }
    }

    /**
     * 显示房屋列表
     */
    private void listHouses() {
        System.out.println("-------------显示房屋列表信息-------------------");
        System.out.println("编号 房主 电话 地址 月租 状态(未出租/已出租)");
        // 调用业务层
        // （1）获取所有的房屋信息
        // （2）显示房屋信息
        House[] houses = houseService.getHouseList();
        for (int i = 0; i < houses.length; i++) {
            // 如果在循环输出的时候 当前的房屋信息是null 则停止循环输出后面的null值
            if (houses[i] == null) {
                break;
            }
            System.out.println(houses[i]);
        }
        System.out.println("------房屋信息列表显示完毕------");
    }

    /**
     * 用户退出登录
     */
    public void exit(){
        input = Utility.readConfirmSelection();
        if (input == 'Y') {
            loop = false;
        }
    }
}
